package com.lapula.crazyface.gif;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

import com.lapula.crazyface.util.ImageUtils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

/**
 * 通过java合成GIF图片
 * 
 * @author johdan
 * 
 */
public class GifGenerator {
	
	/**
	 * @param pics
	 *            JPEG文件的路径数组
	 * @param newPic
	 *            生成后的gif文件
	 * @param delay
	 *            两帧之间的间隔
	 */
	public static boolean bitmap2Gif(List<Bitmap> pics, OutputStream os, int delay) {
		try {
			AnimatedGifEncoder e = new AnimatedGifEncoder();
			e.setRepeat(0);
			e.start(os);
			for (int i = 0; i < pics.size(); i++) {
Log.e("add a frame", String.valueOf(i));
				e.setDelay(delay); // 设置播放的延迟时间
				Bitmap compressedBitmap = ImageUtils.compressImage(pics.get(i), 30, false);
				Bitmap scaledBitmap = Bitmap.createScaledBitmap(compressedBitmap, 180, 180, true);
				e.addFrame(scaledBitmap); // 添加到帧中
				compressedBitmap.recycle();
				scaledBitmap.recycle();
			}
			e.finish();// 刷新任何未决的数据，并关闭输出文件
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * @param pics
	 *            JPEG文件的路径数组
	 * @param newPic
	 *            生成后的gif文件
	 * @param delay
	 *            两帧之间的间隔
	 */
	public static void jpgToGif(String pics[], String newPic, int delay) {
		try {
			Log.i("jpgToGif", "is connection =" + newPic);
			AnimatedGifEncoder e = new AnimatedGifEncoder();
			e.setRepeat(1);
			e.start(newPic);
			for (int i = 0; i < pics.length; i++) {
				e.setDelay(delay); // 设置播放的延迟时间
				Bitmap src = BitmapFactory.decodeFile(pics[i]);
				e.addFrame(src); // 添加到帧中
			}
			e.finish();// 刷新任何未决的数据，并关闭输出文件
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @param pics
	 *            JPEG文件的路径数组
	 * @param newPic
	 *            生成后的gif文件
	 * @param delay
	 *            两帧之间的间隔
	 */
	public static boolean bitmap2Gif(List<Bitmap> pics, String newPic, int delay) {
			OutputStream os;
			try {
				os = new FileOutputStream(new File(newPic));
				return bitmap2Gif(pics, os, delay);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
				return false;
			}
	}

	/**
	 * @param pics
	 *            JPEG文件的路径数组
	 * @param newPic
	 *            生成后的gif文件
	 * @param delays
	 *            每帧之间的间隔
	 */
	public static void jpgToGif(String pics[], String newPic, int[] delays) {
		try {
			Log.i("jpgToGif", "is connection =" + newPic);
			AnimatedGifEncoder e = new AnimatedGifEncoder();
			e.setRepeat(1);
			e.start(newPic);

			for (int i = 0; i < pics.length; i++) {
				e.setDelay(delays[i]); // 设置播放的延迟时间
				Bitmap src = BitmapFactory.decodeFile(pics[i]);
				e.addFrame(src); // 添加到帧中
			}
			e.finish();// 刷新任何未决的数据，并关闭输出文件
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}